package com.yf.exam.modules.paper.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yf.base.api.api.dto.PagingReqDTO;
import com.yf.exam.modules.paper.dto.PaperDTO;
import com.yf.exam.modules.paper.dto.ext.PaperQuDetailDTO;
import com.yf.exam.modules.paper.dto.request.PaperListReqDTO;
import com.yf.exam.modules.paper.dto.response.ExamDetailRespDTO;
import com.yf.exam.modules.paper.dto.response.ExamResultRespDTO;
import com.yf.exam.modules.paper.dto.response.LeaveCheckRespDTO;
import com.yf.exam.modules.paper.dto.response.PaperListRespDTO;
import com.yf.exam.modules.paper.entity.Paper;
import org.apache.ibatis.annotations.Param;

/**
* <p>
* 试卷业务类
* </p>
*
* @author 聪明笨狗
* @since 2020-05-25 16:33
*/
public interface PaperService extends IService<Paper> {

    /**
     * 创建试卷
     * @param userId
     * @param departCode
     * @param examId
     * @param password
     * @param faceToken
     * @param courseId
     * @return
     */
    String createPaper(String userId, String departCode, String examId, String password, String faceToken, String courseId);


    /**
     * 查找详情
     * @param paperId
     * @return
     */
    ExamDetailRespDTO paperDetail(String paperId);


    /**
     * 考试结果
     * @param paperId
     * @return
     */
    ExamResultRespDTO paperResult(String paperId);

    /**
     * 查找题目详情
     * @param paperId
     * @param quId
     * @return
     */
    PaperQuDetailDTO findQuDetail(String paperId, String quId);

    /**
     * 填充答案
     * @param reqDTO
     */
    Boolean fillAnswer(PaperQuDetailDTO reqDTO);

    /**
     * 交卷操作
     * @param paperId
     * @param exState @see com.yf.exam.enums.PaperExState
     * @param message
     */
    void handExam(String paperId, Integer exState, String message);

    /**
     * 阅卷完成
     * @param reqDTO
     */
    void reviewPaper(ExamResultRespDTO reqDTO);


    /**
     * 试卷列表响应类
     * @param reqDTO
     * @return
     */
    IPage<PaperListRespDTO> paging(PagingReqDTO<PaperListReqDTO> reqDTO);

    /**
     * 试卷列表响应类
     * @param reqDTO
     * @return
     */
    IPage<PaperListRespDTO> myPaging(PagingReqDTO<PaperListReqDTO> reqDTO);


    /**
     * 检测是否有进行中的考试
     * @param userId
     * @return
     */
    PaperDTO checkProcess(String userId);


    /**
     * 作弊离开检测
     * @param id
     * @return
     */
    LeaveCheckRespDTO leave(String id);

    /**
     * 统计正在考试的数量
     * @param examId
     * @return
     */
    int countProcess(String examId);

    /**
     * 统计正在考试的数量，根据试卷ID
     * @param tmplId
     * @return
     */
    int countByTmpl(String tmplId);


    /**
     * 全部交卷
     * @param examId
     * @param exState
     * @param message
     */
    void handAll(String examId, Integer exState, String message);

    /**
     *
     */
    void saveById(Paper paper);

    /**
     * 测试主观题试题
     * @param paperId
     */
    void PaperServicei(String paperId);

}
